package org.itstack.state.order;

/**
 * 已发货状态
 * 订单已发货，正在运输途中
 * 
 * 设计原则：
 * - 单一职责：只负责已发货状态的行为
 * - 里氏替换：可以替换抽象订单状态
 */
public class ShippedState implements OrderState {
    
    @Override
    public String getStateName() {
        return "已发货";
    }
    
    @Override
    public String getStateDescription() {
        return "订单已发货，正在运输途中";
    }
    
    @Override
    public void handleAction(OrderContext context, OrderAction action) {
        switch (action) {
            case DELIVER:
                System.out.println(String.format("订单 %s 已送达", context.getOrderId()));
                context.setState(new DeliveredState());
                break;
            case REFUND:
                System.out.println(String.format("订单 %s 在运输途中申请退款，需要等待送达后处理", 
                    context.getOrderId()));
                break;
            default:
                System.out.println(String.format("订单 %s 在已发货状态下无法执行 %s 操作", 
                    context.getOrderId(), action.getName()));
        }
    }
    
    @Override
    public boolean canExecuteAction(OrderAction action) {
        return action == OrderAction.DELIVER || action == OrderAction.REFUND;
    }
}
